package h_eekwan.basic;

public class J12_AccessModifier {

	// 멤버변수
	String defaultName;
	private String privateName;
	protected String protectedName;
	public String publicName;
	
	// 메서드
	String defaultHello() { return "Hello";}
	private String privateHello() { return "Hello";}
	protected String protectedHello() { return "Hello";}
	public String publicHello() {return "Hello";}
	
	
	public static void main(String[] args) {
		// 접근지정자 : access modifier
		// 객체지향 3가지 특성 중 캡슐화와 관련
		// default, private, protected, public
		
		// default로 선언된 클래스에 대한 객체 선언
		// 같은 패키지내에 J12_AccessModifier 과
		// J12_DefaultClass이 존재하므로 접근가능
		J12_DefaultClass defaultClass = new J12_DefaultClass();	// 객체선언
		defaultClass.name = "자바7";
		defaultClass.sayHello();
		
		// private으로 선언된 멤버변수 / 메서드 접근 (중요 !)
		// private 으로 선언된 멤버변수와 메서드는
		// 멤버변수와 메서드를 선언한 클래스 내에서만
		// 접근 가능하고 외부 클래스에서는 접근 불가
		J12_PrivateAccessor privateAccessor = new J12_PrivateAccessor();
		// privateAccessor.sayHello();
		// privateAccessor.name = "자바7";
		
		// protected으로 선언된 멤버변수/ 메서드 접근 (중요!)
		J12_ProtectedAccessor protectedAccessor = new J12_ProtectedAccessor();
		protectedAccessor.name = "자바7";
		protectedAccessor.sayHello();
		
		// public으로 선언된 멤버변수 / 메서드 접근 
		J12_PublicAccessor publicAccessor = new J12_PublicAccessor();
		publicAccessor.name = "하";
		publicAccessor.sayHello();
		
		System.out.println(publicAccessor.name+publicAccessor.sayHello());
		}	//main

}	// class

class J12_DefaultClass{
	// 접근 지정자가 default로 선언된 멤버변수
	String name;
	
	// 접근 지정자가 default로 선언된 메서드
	String sayHello(){return "hello!!!!";	}
}
class J12_PrivateAccessor{
	// 접근 지정자가 private으로 선언된 멤버변수
	private String name;
	
	//접근 지정자가 private으로 선언된 메서드
	private String sayHello(){ return "hello !!!"; }
	
	
	
}
class J12_ProtectedAccessor{
	// 접근 지정자가 protected으로 선언된 멤버변수
	protected String name;
	
	//접근 지정자가 protected으로 선언된 메서드
	protected String sayHello(){ return "hello !!"; }
}
class J12_PublicAccessor{
	// 접근 지정자가 public으로 선언된 멤버변수
	public String name;
	
	//접근 지정자가 public으로 선언된 메서드
	public String sayHello(){ return "hello !"; }
}




